﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;

public static class StringExtension
{
    public static string FormatPhonenumberStartWith84(this string PhoneNumber)
    {
        PhoneNumber = Regex.Replace(PhoneNumber, "^0", "84");
        return PhoneNumber;
    }
    public static string FormatPhonenumberStartWith0(this string PhoneNumber)
    {
        PhoneNumber = Regex.Replace(PhoneNumber, "^84", "0");
        return PhoneNumber;
    }
    public static bool IsPhoneNumber(this string PhoneNumber)
    {
        PhoneNumber = PhoneNumber.FormatPhonenumberStartWith0();
        return Regex.Match(PhoneNumber, "^0[0-9]{9,12}$").Success;
    }
    public static string GetTelco(this string PhoneNumber)
    {
        string Vietel = "096-097-098-0162-0163-0164-0165-0166-0167-0168-0169";
        string Mobifone = "090-093-0120-0121-0122-0126-0128";
        string Vinaphone = "091-094-0123-0124-0125-0127-0129";
        string Vietnamemobile = "092-0188";
        string Beeline = "0996-0199";
        string Sfone = "095";
        string phonenumber = PhoneNumber.FormatPhonenumberStartWith0();
        foreach (string item in Vietel.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "VIETTEL";
        }
        foreach (string item in Mobifone.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "MOBIFONE";
        }
        foreach (string item in Vinaphone.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "VINAPHONE";
        }
        foreach (string item in Vietnamemobile.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "VIETNAMMOBILE";
        }
        foreach (string item in Beeline.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "BEELINE";
        }
        foreach (string item in Sfone.Split('-'))
        {
            if (phonenumber.StartsWith(item))
                return "SFONE";
        }
        return "";
    }
    public static bool IsNumber(this string str)
    {
        if (str.IsNullOrEmpty())
            return false;
        return Regex.Match(str, "^[0-9]+$").Success;
    }
    public static string GetUnsignText(this string content)
    {
        String[,] Mang = new String[14, 17];

        Byte i, j;
        String Chuoi;
        String Thga, Thge, Thgo, Thgu, Thgi, Thgd, Thgy;
        String HoaA, HoaE, HoaO, HoaU, HoaI, HoaD, HoaY;
        Chuoi = "aAeEoOuUiIdDyY";
        Thga = "áàạảãâấầậẩẫăắằặẳẵ";
        HoaA = "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ";
        Thge = "éèẹẻẽêếềệểễeeeeee";
        HoaE = "ÉÈẸẺẼÊẾỀỆỂỄEEEEEE";
        Thgo = "óòọỏõôốồộổỗơớờợởỡ";
        HoaO = "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ";
        Thgu = "úùụủũưứừựửữuuuuuu";
        HoaU = "ÚÙỤỦŨƯỨỪỰỬỮUUUUUU";
        Thgi = "íìịỉĩiiiiiiiiiiii";
        HoaI = "ÍÌỊỈĨIIIIIIIIIIII";
        Thgd = "đdddddddddddddddd";
        HoaD = "ĐDDDDDDDDDDDDDDDD";
        Thgy = "ýỳỵỷỹyyyyyyyyyyyy";
        HoaY = "ÝỲỴỶỸYYYYYYYYYYYY";

        for (i = 0; i <= 13; i++)
        {
            Mang[i, 0] = Chuoi.Substring(i, 1);
        }

        //for (j = 1; j < 18; j++)
        for (i = 1; i < 17; i++)
        {
            Mang[0, i] = Thga.Substring(i, 1);//Nạp từng ký tự trong chuỗi Thga vào từng ô trong hàng 0
            Mang[1, i] = HoaA.Substring(i, 1);//Nạp từng ký tự trong chuỗi HoaA vào từng ô trong  hàng 1
            Mang[2, i] = Thge.Substring(i, 1);//Nạp từng ký tự trong chuỗi Thge vào từng ô trong  hàng 2
            Mang[3, i] = HoaE.Substring(i, 1); //Nạp từng ký tự trong chuỗi HoaE vào từng ô trong  hàng 3
            Mang[4, i] = Thgo.Substring(i, 1); //Nạp từng ký tự trong chuỗi Thgo vào từng ô trong  hàng 4
            Mang[5, i] = HoaO.Substring(i, 1); //Nạp từng ký tự trong chuỗi HoaO vào từng ô trong  hàng 5
            Mang[6, i] = Thgu.Substring(i, 1); //Nạp từng ký tự trong chuỗi Thgu vào từng ô trong  hàng 6
            Mang[7, i] = HoaU.Substring(i, 1); //Nạp từng ký tự trong chuỗi HoaU vào từng ô trong  hàng 7
            Mang[8, i] = Thgi.Substring(i, 1);//Nạp từng ký tự trong chuỗi Thgi vào từng ô trong  hàng 8
            Mang[9, i] = HoaI.Substring(i, 1);//Nạp từng ký tự trong chuỗi HoaI vào từng ô trong  hàng 9
            Mang[10, i] = Thgd.Substring(i, 1); //Nạp từng ký tự trong chuỗi Thgd vào từng ô trong  hàng 10
            Mang[11, i] = HoaD.Substring(i, 1); //Nạp từng ký tự trong chuỗi HoaD vào từng ô trong  hàng 11
            Mang[12, i] = Thgy.Substring(i, 1); //Nạp từng ký tự trong chuỗi Thgy vào từng ô trong  hàng 12
            Mang[13, i] = HoaY.Substring(i, 1); //Nạp từng ký tự trong chuỗi HoaY vào từng ô trong  hàng 13
        }

        String Tam1, Tam2;
        Tam1 = content.ToLower();

        for (j = 0; j < 14; j++)
            for (i = 1; i < 17; i++)
            {
                Tam2 = Tam1.Replace(Mang[j, i], Mang[j, 0]);
                Tam1 = Tam2;
            }

        Tam1 = Tam1.Replace("í", "i").ToLower();
        Tam1 = Tam1.Replace("á", "a").ToLower();
        Tam1 = Tam1.Replace("é", "e").ToLower();
        Tam1 = Tam1.Replace("ắ", "a").ToLower();
        Tam1 = Tam1.Replace("ấ", "a").ToLower();
        Tam1 = Tam1.Replace("ế", "e").ToLower();
        Tam1 = Tam1.Replace("ố", "o").ToLower();
        Tam1 = Tam1.Replace("ớ", "o").ToLower();
        Tam1 = Tam1.Replace("ó", "o").ToLower();
        Tam1 = Tam1.Replace("ý", "y").ToLower();
        Tam1 = Tam1.Replace("ú", "u").ToLower();
        Tam1 = Tam1.Replace("ứ", "u").ToLower();
        Tam1 = Tam1.Replace("đ", "d").ToLower();

        return Tam1;
    }
    public static string ToUpperFirstChar(this string content)
    {
        try
        {
            if (!string.IsNullOrEmpty(content))
            {
                string firstChar = content[0].ToString().ToUpper();
                return firstChar + content.Substring(1);
            }
        }
        catch (Exception)
        {

        }
        return string.Empty;
    }
    public static string GetShortString(this string content, int count)
    {
        if (content.Length <= count - 3)
            return content;
        content = content.Substring(0, count - 3);
        return content + "...";
    }
    public static string ReplaceAll(this string content, string pattern, string contentReplace)
    {
        return Regex.Replace(content, pattern, contentReplace);
    }
    public static string ReplaceLast(this string content, int amount, string contentReplace)
    {
        if (content.Length <= amount)
            return content;
        string content1 = content.Substring(0, content.Length - amount);
        return content1 + contentReplace;
    }
    public static string[] Split(this string content, string separator)
    {
        return Regex.Split(content, separator);
        //MatchCollection matches = Regex.Matches(content, separator);
        //if (matches.Count > 0)
        //{
        //    string[] arr = new string[matches.Count];
        //    for (int i = 0; i < matches.Count; i++)
        //    {
        //        arr[i] = matches[i].Value.Trim();
        //    }
        //    return arr;
        //}
        return new string[] { content };
    }
    public static string TrimAll(this string content)
    {
        return ReplaceAll(content, "\\s+", "");
    }
    public static DateTime ToDateTime(this string datetime, string format, string DateSeparator)
    {
        DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
        dtfi.ShortDatePattern = format;
        dtfi.DateSeparator = DateSeparator;
        DateTime objDate = Convert.ToDateTime(datetime, dtfi);
        return objDate;
    }
    public static DateTime ToDateTime(this string datetime)
    {
        return datetime.ToDateTime("dd/MM/yyyy", "/");
    }
    public static bool IsNullOrEmpty(this string content)
    {
        return string.IsNullOrEmpty(content);
    }
    public static string EncodeBase64(this string plainText)
    {
        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
        return System.Convert.ToBase64String(plainTextBytes);
    }
    public static string DecodeBase64(this string base64EncodedData)
    {
        var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
        return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
    }

}

